﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace RPG_The_Game.Objetos
{
    class Rato:Objetos.Sprite
    {
        //protected GameWindow window;
        //protected Texture2D imagem;
        //protected Vector2 posicao;
        //protected Vector2 velocidade;
        //protected bool visivel;
        
        Texture2D paradoTextura, andandoTextura, frenteTextura;

        SoundEffect efeitoSonoro;
        /// <summary>
        /// Para aonde o rato vai se mover
        /// </summary>
        public Vector2 posMouse;
        /// <summary>
        /// Calcular a diferença entre a posição rato e a do mouse
        /// </summary>
        public Vector2 diferenca;
        int vida;
        int pontos;
        public Vector2 PosMouse
        {
            get
            {
                return posMouse;
            }

            set
            {
                posMouse = value;
            }
        }
        public Vector2 Posicao
        {
            get
            {
                return posicao;
            }

            set
            {
                posicao = value;
            }
        }

        animacao parado;
        animacao andando;
        animacao atacando;
        animacao pulando;
        //animacao frente;
        public animacao animacao_atual;


        public Rato(Texture2D textura, Texture2D textura2, Vector2 posicao, Vector2 velocidade, GameWindow window)
            :base(textura)
        {
            this.andandoTextura = textura;
            this.paradoTextura = textura2;
            //this.frenteTextura = textura3;

            this.textura = paradoTextura;
            this.posicao = posicao;
            this.velocidade = velocidade;
            this.window = window;
        }

        public Rato(Texture2D textura, Texture2D textura2, GameWindow window, SoundEffect efeitoSonoro)
            : base(textura)
        {
            this.andandoTextura = textura;
            this.paradoTextura = textura2;
            //this.frenteTextura = textura3;

            this.textura = paradoTextura;
            this.window = window;
            this.efeitoSonoro = efeitoSonoro;

            parado = new animacao();
            parado.qtd_quadros = 1;
            parado.quadros_seg = 1;
            parado.Y = 0;
            parado.quadro_X = textura.Width / parado.qtd_quadros;
            parado.quadro_Y = textura.Height / parado.qtd_quadros;
            parado.nome = "parado";
            destino = new Rectangle(0, 0, parado.quadro_X, parado.quadro_Y);

 
            andando = new animacao();
            andando.qtd_quadros = 4;
            andando.quadros_seg = 4;
            andando.Y = 0;
            andando.quadro_X = textura.Width / andando.qtd_quadros;
            andando.quadro_Y = textura.Height / andando.qtd_quadros;
            direita = true;
            andando.nome = "andando";
            destino = new Rectangle(0, 0, andando.quadro_X, andando.quadro_Y);



            animacao_atual = andando;
            

        }

        public override void Update(GameTime gameTime) { }
             
        public void Update(GameTime gameTime, KeyboardState teclado, KeyboardState teclado_anterior)
        {
            if (teclado.IsKeyUp(Keys.Right) && (teclado.IsKeyUp(Keys.Left) && (teclado.IsKeyUp(Keys.Down) && (teclado.IsKeyUp(Keys.Up)))))
            {
                parado.qtd_quadros = 1;
                parado.quadros_seg = 1;
                this.textura = this.paradoTextura;
                animacao_atual = parado;
            }
            else
            {

                this.textura = this.andandoTextura;
                animacao_atual = andando;
            }

            
            if (teclado.IsKeyDown(Keys.Right))
            {
                posicao.X += velocidade.X;// *(float)gameTime.ElapsedGameTime.Milliseconds;
                //direita = true;
                andando.Y = 55;
                
            }

            if (teclado.IsKeyDown(Keys.Left))
            {
                posicao.X -= velocidade.X;
                //direita = false;
                andando.Y = 28;
            }

            if (teclado.IsKeyDown(Keys.Up))
            {
                posicao.Y -= velocidade.Y;
                andando.Y = 81;
            }

            if (teclado.IsKeyDown(Keys.Down))
            {
                /*frente = new animacao();
                frente.qtd_quadros = 4;
                frente.quadros_seg = 4;
                frente.Y = 0;
                frente.quadro_X = textura.Width;
                frente.quadro_Y = textura.Height / frente.qtd_quadros;
                frente.nome = "frente";*/
                posicao.Y += velocidade.Y;
                andando.Y = 0;
            }

            if (teclado.IsKeyDown(Keys.Space) && !teclado_anterior.IsKeyDown(Keys.Space))
            {                
                efeitoSonoro.Play();
            }

            if (posicao.X >= window.ClientBounds.Width - destino.Width)
            {
                posicao.X = window.ClientBounds.Width - destino.Width;
            }

            if (posicao.Y >= window.ClientBounds.Height - destino.Height)
            {
                posicao.Y = window.ClientBounds.Height - destino.Height;
            }

            if (posicao.X <= 0)
            {
                posicao.X = 0;
            }

            if (posicao.Y <= 0)
            {
                posicao.Y = 0;
            }
        }
        public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
        {
           
           base.Draw(gameTime, spriteBatch, animacao_atual);
            
        }
    }
}
